//MecDaisy_dezNova
package voxToolkit;

import java.awt.AWTEvent;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import audio.AudioSintetizado;
import audio.SoundEvent;
import audio.SoundListener;

public class VoxListEvent implements ListSelectionListener, KeyListener,
		FocusListener, SoundListener {

	private AudioSintetizado sintetizador;
	VoxContexto voxContexto = VoxContexto.instancia();
	static private VoxListEvent instancia = null;

	private VoxListEvent() {
		sintetizador = AudioSintetizado.instancia();
		sintetizador.addSoundListener(this);
		new Thread(sintetizador).start();
	}

	static public VoxListEvent instancia() {
		if (instancia == null)
			instancia = new VoxListEvent();
		return instancia;
	}

	/**
	 * Fala o item quando as setas direita e esquerda são pressionadas.
	 * 
	 * 
	 */
	@Override
	public void keyPressed(KeyEvent e) {

	}

	@Override
	public void keyReleased(KeyEvent e) {

	}

	/**
	 * Fala cada caracter digitado.
	 * 
	 */
	@Override
	public void keyTyped(KeyEvent e) {

	}

	/**
	 * Fala o rotulo do componente quando este ganha foco.
	 * 
	 */
	@Override
	public void focusGained(FocusEvent e) {
		VoxList lista = (VoxList) e.getSource();

		// Fala o rotulo
		System.out.println(lista.getRotulo());
		sintetizador.escreve(lista.getRotulo());

		// Fala total de itens
		System.out.println(lista.getTotalItens());
		int totalItens = lista.getTotalItens();
		String retorno = totalItens + " " + "itens";
		sintetizador.escreve(retorno);
	}

	@Override
	public void focusLost(FocusEvent e) {
		sintetizador.abortaFala();

	}

	@Override
	public void FimDeFala(SoundEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void eventDispatched(AWTEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void valueChanged(ListSelectionEvent e) {
		if (!e.getValueIsAdjusting()) {
			sintetizador.abortaFala();
			VoxList lista = (VoxList) e.getSource();

			if (!lista.isSelectionEmpty()) {
				sintetizador.escreve(lista.getItemAtual());
			}
		}
	}

}
